{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"45%\" align=\"right\" border=\"4\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Multi-Risk Derivatives Portfolios"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The step from multi-risk derivatives instruments to multi-risk derivatives instrument portfolios is not a too large one. This part of the tutorial shows how to model an economy with three risk factors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dx import *\n",
    "from pylab import plt\n",
    "plt.style.use('seaborn')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Risk Factors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This sub-section models the single risk factors. We start with definition of the risk-neutral discounting object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# constant short rate\n",
    "r = constant_short_rate('r', 0.02)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Three risk factors** ares modeled:\n",
    "\n",
    "* geometric Brownian motion\n",
    "* jump diffusion\n",
    "* stochastic volatility process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# market environments\n",
    "me_gbm = market_environment('gbm', dt.datetime(2015, 1, 1))\n",
    "me_jd = market_environment('jd', dt.datetime(2015, 1, 1))\n",
    "me_sv = market_environment('sv', dt.datetime(2015, 1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assumptions for the `geometric_brownian_motion` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# geometric Brownian motion\n",
    "me_gbm.add_constant('initial_value', 36.)\n",
    "me_gbm.add_constant('volatility', 0.2) \n",
    "me_gbm.add_constant('currency', 'EUR')\n",
    "me_gbm.add_constant('model', 'gbm')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assumptions for the `jump_diffusion` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# jump diffusion\n",
    "me_jd.add_constant('initial_value', 36.)\n",
    "me_jd.add_constant('volatility', 0.2)\n",
    "me_jd.add_constant('lambda', 0.5)\n",
    "    # probability for jump p.a.\n",
    "me_jd.add_constant('mu', -0.75)\n",
    "    # expected jump size [%]\n",
    "me_jd.add_constant('delta', 0.1)\n",
    "    # volatility of jump\n",
    "me_jd.add_constant('currency', 'EUR')\n",
    "me_jd.add_constant('model', 'jd')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assumptions for the `stochastic_volatility` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# stochastic volatility model\n",
    "me_sv.add_constant('initial_value', 36.)\n",
    "me_sv.add_constant('volatility', 0.2)\n",
    "me_sv.add_constant('vol_vol', 0.1)\n",
    "me_sv.add_constant('kappa', 2.5)\n",
    "me_sv.add_constant('theta', 0.4)\n",
    "me_sv.add_constant('rho', -0.5)\n",
    "me_sv.add_constant('currency', 'EUR')\n",
    "me_sv.add_constant('model', 'sv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, the unifying valuation assumption for the **valuation environment**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# valuation environment\n",
    "val_env = market_environment('val_env', dt.datetime(2015, 1, 1))\n",
    "val_env.add_constant('paths', 10000)\n",
    "val_env.add_constant('frequency', 'W')\n",
    "val_env.add_curve('discount_curve', r)\n",
    "val_env.add_constant('starting_date', dt.datetime(2015, 1, 1))\n",
    "val_env.add_constant('final_date', dt.datetime(2015, 12, 31))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "These are added to the single `market_environment` objects of the risk factors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# add valuation environment to market environments\n",
    "me_gbm.add_environment(val_env)\n",
    "me_jd.add_environment(val_env)\n",
    "me_sv.add_environment(val_env)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, the **market model** with the risk factors and the correlations between them."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "risk_factors = {'gbm' : me_gbm, 'jd' : me_jd, 'sv' : me_sv}\n",
    "correlations = [['gbm', 'jd', 0.66], ['jd', 'sv', -0.75]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Derivatives"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this sub-section, we model the single derivatives instruments."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### American Put Option"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first derivative instrument is an **American put option**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "gbm = geometric_brownian_motion('gbm_obj', me_gbm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "me_put = market_environment('put', dt.datetime(2015, 1, 1))\n",
    "me_put.add_constant('maturity', dt.datetime(2015, 12, 31))\n",
    "me_put.add_constant('strike', 40.)\n",
    "me_put.add_constant('currency', 'EUR')\n",
    "me_put.add_environment(val_env)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "am_put = valuation_mcs_american_single('am_put', mar_env=me_put, underlying=gbm,\n",
    "                       payoff_func='np.maximum(strike - instrument_values, 0)')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5.012"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "am_put.present_value(fixed_seed=True, bf=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### European Maximum Call on 2 Assets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The second derivative instrument is a **European maximum call option on two risk factors**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "jd = jump_diffusion('jd_obj', me_jd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "me_max_call = market_environment('put', dt.datetime(2015, 1, 1))\n",
    "me_max_call.add_constant('maturity', dt.datetime(2015, 9, 15))\n",
    "me_max_call.add_constant('currency', 'EUR')\n",
    "me_max_call.add_environment(val_env)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "payoff_call = \"np.maximum(np.maximum(maturity_value['gbm'], maturity_value['jd']) - 34., 0)\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "assets = {'gbm' : me_gbm, 'jd' : me_jd}\n",
    "asset_corr = [correlations[0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['gbm', 'jd', 0.66]]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "asset_corr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_call = valuation_mcs_european_multi('max_call', me_max_call, assets, asset_corr,\n",
    "        payoff_func=payoff_call)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8.334"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_call.present_value(fixed_seed=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7596"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_call.delta('jd')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.2824"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_call.delta('gbm')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### American Minimum Put on 2 Assets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The third derivative instrument is an **American minimum put on two risk factors**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "sv = stochastic_volatility('sv_obj', me_sv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "me_min_put = market_environment('min_put', dt.datetime(2015, 1, 1))\n",
    "me_min_put.add_constant('maturity', dt.datetime(2015, 6, 17))\n",
    "me_min_put.add_constant('currency', 'EUR')\n",
    "me_min_put.add_environment(val_env)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "payoff_put = \"np.maximum(32. - np.minimum(instrument_values['jd'], instrument_values['sv']), 0)\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['jd', 'sv', -0.75]]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "assets = {'jd' : me_jd, 'sv' : me_sv}\n",
    "asset_corr = [correlations[1]]\n",
    "asset_corr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "min_put = valuation_mcs_american_multi(\n",
    "                'min_put', val_env=me_min_put, risk_factors=assets,\n",
    "                correlations=asset_corr, payoff_func=payoff_put)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.296"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_put.present_value(fixed_seed=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.0981"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_put.delta('jd')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.2102"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_put.delta('sv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Portfolio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To compose a derivatives portfolio, `derivatives_position` objects are needed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "am_put_pos = derivatives_position(\n",
    "                    name='am_put_pos',\n",
    "                    quantity=2,\n",
    "                    underlyings=['gbm'],\n",
    "                    mar_env=me_put,\n",
    "                    otype='American single',\n",
    "                    payoff_func='np.maximum(instrument_values - 36., 0)')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_call_pos = derivatives_position(\n",
    "                    'max_call_pos', 3, ['gbm', 'jd'],\n",
    "                    me_max_call, 'European multi',\n",
    "                    payoff_call)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "min_put_pos = derivatives_position(\n",
    "                    'min_put_pos', 5, ['sv', 'jd'],\n",
    "                    me_min_put, 'American multi',\n",
    "                    payoff_put)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "These objects are to be collected in `dictionary` objects."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "positions = {'am_put_pos' : am_put_pos, 'max_call_pos' : max_call_pos,\n",
    "             'min_put_pos' : min_put_pos}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All is together to instantiate the `derivatives_portfolio` class."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "port = derivatives_portfolio(name='portfolio',\n",
    "                             positions=positions,\n",
    "                             val_env=val_env,\n",
    "                             risk_factors=risk_factors,\n",
    "                             correlations=correlations)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us have a look at the major **portfolio statistics**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Totals\n",
      " pos_value    51.769\n",
      "dtype: float64\n",
      "CPU times: user 1.42 s, sys: 124 ms, total: 1.55 s\n",
      "Wall time: 1.48 s\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>position</th>\n",
       "      <th>name</th>\n",
       "      <th>quantity</th>\n",
       "      <th>otype</th>\n",
       "      <th>risk_facts</th>\n",
       "      <th>value</th>\n",
       "      <th>currency</th>\n",
       "      <th>pos_value</th>\n",
       "      <th>pos_delta</th>\n",
       "      <th>pos_vega</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>am_put_pos</td>\n",
       "      <td>am_put_pos</td>\n",
       "      <td>2</td>\n",
       "      <td>American single</td>\n",
       "      <td>[gbm]</td>\n",
       "      <td>3.182</td>\n",
       "      <td>EUR</td>\n",
       "      <td>6.364</td>\n",
       "      <td>1.2184</td>\n",
       "      <td>30.5422</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>max_call_pos</td>\n",
       "      <td>max_call_pos</td>\n",
       "      <td>3</td>\n",
       "      <td>European multi</td>\n",
       "      <td>[gbm, jd]</td>\n",
       "      <td>8.165</td>\n",
       "      <td>EUR</td>\n",
       "      <td>24.495</td>\n",
       "      <td>{'gbm': 0.8646, 'jd': 2.2662}</td>\n",
       "      <td>{'gbm': 14.9805, 'jd': 10.35}</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>min_put_pos</td>\n",
       "      <td>min_put_pos</td>\n",
       "      <td>5</td>\n",
       "      <td>American multi</td>\n",
       "      <td>[sv, jd]</td>\n",
       "      <td>4.182</td>\n",
       "      <td>EUR</td>\n",
       "      <td>20.910</td>\n",
       "      <td>{'sv': -1.1675, 'jd': -0.6225}</td>\n",
       "      <td>{'sv': 8.322, 'jd': 11.352}</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       position          name  quantity            otype risk_facts  value  \\\n",
       "0    am_put_pos    am_put_pos         2  American single      [gbm]  3.182   \n",
       "1  max_call_pos  max_call_pos         3   European multi  [gbm, jd]  8.165   \n",
       "2   min_put_pos   min_put_pos         5   American multi   [sv, jd]  4.182   \n",
       "\n",
       "  currency  pos_value                       pos_delta  \\\n",
       "0      EUR      6.364                          1.2184   \n",
       "1      EUR     24.495   {'gbm': 0.8646, 'jd': 2.2662}   \n",
       "2      EUR     20.910  {'sv': -1.1675, 'jd': -0.6225}   \n",
       "\n",
       "                        pos_vega  \n",
       "0                        30.5422  \n",
       "1  {'gbm': 14.9805, 'jd': 10.35}  \n",
       "2    {'sv': 8.322, 'jd': 11.352}  "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time stats = port.get_statistics()\n",
    "stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "51.769000000000005"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stats['pos_value'].sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, a graphical look at **two selected, simulated paths** of the stochastic volatility risk factor and the jump diffusion risk factor, respectively."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "path_no = 1\n",
    "paths1 = port.underlying_objects['sv'].get_instrument_values()[:, path_no]\n",
    "paths2 = port.underlying_objects['jd'].get_instrument_values()[:, path_no]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([36.        , 36.34884124, 34.9130166 , 36.31001777, 34.85894675,\n",
       "       35.63213975, 39.0707393 , 44.35899961, 44.47413556, 43.13168786,\n",
       "       47.48647475, 46.27393881, 43.49655379, 47.23009583, 49.53908109,\n",
       "       43.71731937, 51.76008829, 52.58524036, 54.2573447 , 51.6460015 ,\n",
       "       44.28088435, 39.01540236, 32.91109921, 30.24790867, 29.61667412,\n",
       "       31.76473582, 27.30258542, 28.39127869, 28.23333544, 27.08972766,\n",
       "       27.32993764, 28.65926992, 26.9785575 , 31.8938528 , 34.58971037,\n",
       "       32.7699367 , 29.35365969, 28.66856698, 31.14196767, 31.37051847,\n",
       "       30.10832392, 33.11928276, 34.48108709, 32.97416103, 28.08648082,\n",
       "       26.52705819, 21.57771857, 20.42912064, 20.99231801, 19.23163105,\n",
       "       21.37234395, 20.80944619, 20.73301676, 20.79953889, 20.34822548,\n",
       "       18.69820953])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "paths1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([36.        , 36.09036184, 37.30618631, 36.53472814, 36.79572901,\n",
       "       36.66944957, 35.56227649, 33.3644349 , 33.42674479, 34.22659123,\n",
       "       32.22562864, 33.05209641, 33.82798732, 33.20431052, 33.78753542,\n",
       "       36.17164509, 33.76072474, 33.00278459, 32.79744011, 33.50195594,\n",
       "       34.40874205, 34.57037634, 37.00098086, 37.7309694 , 38.32223737,\n",
       "       38.2477447 , 39.92233666, 39.6591103 , 39.43998269, 39.88306801,\n",
       "       40.35338195, 40.23418088, 41.48106905, 39.66194269, 39.32622142,\n",
       "       39.48978055, 40.67396363, 40.76122376, 40.00499204, 39.725126  ,\n",
       "       40.05448393, 39.06546207, 37.674332  , 38.48264394, 40.86222422,\n",
       "       41.3749628 , 44.02458974, 45.32751049, 44.704871  , 45.06224883,\n",
       "       43.38741804, 43.68855748, 44.75023229, 45.4285521 , 45.27511078,\n",
       "       45.68070094])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "paths2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The resulting plot illustrates the strong **negative correlation**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nnP4fa77xaBgKxXQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109117c50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(port.time_grid, paths1, 'r', label='sv')\n",
    "plt.plot(port.time_grid, paths2, 'b', label='jd')\n",
    "plt.gcf().autofmt_xdate()\n",
    "plt.legend(loc=0); plt.grid(True)\n",
    "# negatively correlated underlyings"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Copyright, License & Disclaimer**\n",
    "\n",
    "© Dr. Yves J. Hilpisch | The Python Quants GmbH\n",
    "\n",
    "DX Analytics (the \"dx library\" or \"dx package\") is licensed under the GNU Affero General\n",
    "Public License version 3 or later (see http://www.gnu.org/licenses/).\n",
    "\n",
    "DX Analytics comes with no representations or warranties, to the extent\n",
    "permitted by applicable law.\n",
    "\n",
    "http://tpq.io | [dx@tpq.io](mailto:team@tpq.io) |\n",
    "http://twitter.com/dyjh\n",
    "\n",
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>\n",
    "\n",
    "**Quant Platform** | http://pqp.io\n",
    "\n",
    "**Python for Finance Training** | http://training.tpq.io\n",
    "\n",
    "**Certificate in Computational Finance** | http://compfinance.tpq.io\n",
    "\n",
    "**Derivatives Analytics with Python (Wiley Finance)** |\n",
    "http://dawp.tpq.io\n",
    "\n",
    "**Python for Finance (2nd ed., O'Reilly)** |\n",
    "http://py4fi.tpq.io"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
